/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package saltocaballo.expertos;

import java.util.ArrayList;
import java.util.List;
import saltocaballo.comunes.logger;
import saltocaballo.entidades.Casilla;
import saltocaballo.entidades.Tablero;

/**
 *
 * @author Martinoxs
 */
public class SinMetodo implements Busqueda{

    movimientosCaballo movimientos;
    logger log;
    
    public SinMetodo(){
        movimientos = new movimientosCaballo();
    }
    
    @Override
    public String resolver(Tablero tablero, String metodo, logger logg) {
        
        String rdo = "";
        String casillaDevuelta = "";
        log = logg;
                
        boolean sinSolucion = false;
        int iteracion = 0;
        Casilla casilla = tablero.getCasillaInicio();
        
        List<String> listaMovsRdo = new ArrayList<String>();
        List<String> movsCasilla = new ArrayList<String>();
        
        casillaDevuelta = casilla.getCoordenada();
        tablero.ocuparCasilla(casillaDevuelta);
        listaMovsRdo.add(casillaDevuelta);
        movsCasilla = movimientos.ordenarMovimientos(movimientos.getMovimientosValidos(casillaDevuelta, tablero, tablero.getCopiaPanel()), tablero, tablero.getCopiaPanel(), metodo);
        
        while(!tablero.tableroResuelto(tablero.getCopiaPanel()) && !sinSolucion){
            
//            System.out.println("---------------------------------------------------------");
//            System.out.println("Iteración: " + iteracion + "    -   CasillaDevuelta: " + casillaDevuelta);
//            System.out.println("");
//            for(String c: movsCasilla){
//                System.out.println("    Mov: " + c);
//            }
            
            if (movsCasilla.isEmpty()){
                sinSolucion = true;
            } else {
                tablero.setTieneCaballo(casillaDevuelta, false);
                casillaDevuelta = movsCasilla.get(0);
                tablero.ocuparCasilla(casillaDevuelta);
                listaMovsRdo.add(casillaDevuelta);
                movsCasilla = movimientos.ordenarMovimientos(movimientos.getMovimientosValidos(casillaDevuelta, tablero, tablero.getCopiaPanel()), tablero, tablero.getCopiaPanel(), metodo);
            }
        }
        
        if (listaMovsRdo.contains(casilla.getCoordenada())){
            listaMovsRdo.remove(0);
        }
        
        int i = 0;
        for (String c: listaMovsRdo){
            i++;
            rdo += "\nMovimiento("+i+"): " + c;
        }        
        
        String titulo = "Tablero Resuelto en: " + iteracion + " iteraciones.";
        
        if (sinSolucion){
            rdo = "El Tablero no tiene solución.";
            listaMovsRdo = new ArrayList<String>();
        } else {
            rdo = titulo + rdo;
        }
        
        return rdo;
    }
    
    
}
